# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html


# useful for handling different item types with a single interface
from itemadapter import ItemAdapter

#如果想使用管道的话，必须在settings中开启管道
class ScrapyTest04DangdangPipeline:
    #在爬虫文件开始执行前就执行的方法
    def open_spider(self,spider):
        self.fp = open('book.json','w',encoding='utf-8')
    # items就是yield后面的book对象
    def process_item(self, item, spider):

        #以下模式不推荐，没传递一个对象就打开一次文件，对文件操作过于频繁，容易出问题
        #(1)write方法必须是字符串，不能是其他对象
        #(2)w模式会每一个对象都打开一次文件并且覆盖之前内容关闭,所以要用追加模式
        #with open('book.json','a',encoding='utf-8')as fp:
        #   fp.write(str(item))
        self.fp.write(str(item))
        return item
    #在爬虫文件执行后执行的方法
    def close_spider(self,spider):
        self.fp.close()

import urllib.request
#多条管道同时开启
#（1）定义管道类
#（2）在settings中，开启管道
#（3）DangDangDownloadPipeLine:301
class DangDangDownloadPipeLine:
    def process_item(self,item,spider):

        url = 'http:' + item.get('src')
        filename ='./books/' +  item.get('name')+ '.jpg'
        urllib.request.urlretrieve(url=url,filename=filename)


        return item